package cn.itcast.net.client; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.io.PushbackInputStream; import java.io.RandomAccessFile; import java.net.Socket; import cn.itcast.utils.StreamTool; public class SocketClient { /** * @param args */ public static void main(String[] args) { try { Socket socket = new Socket("127.0.0.1", 7878); OutputStream outStream = socket.getOutputStream(); String filename = "QQWubiSetup.exe"; File file = new File(filename); //�Լ�ʵ���Զ�����񣨿ͻ��˷���Э����Ϣ������������ID�����ڣ�������������ΨһID����sourceid�� //�����ظ��ͻ���,�ٴ���һ��position��֪ͨ�ͻ�����Ҫ�ϴ����ļ�λ�ã� String head = "Content-Length="+ file.length() + ";filename="+ filename + ";sourceid=\r\n"; outStream.write(head.getBytes()); //����Э�鵽������ PushbackInputStream inStream = new PushbackInputStream(socket.getInputStream()); //���ܷ��������ص�����λ�� String response = StreamTool.readLine(inStream); System.out.println(response); String[] items = response.split(";"); String position = items[1].substring(items[1].indexOf("=")+1); RandomAccessFile fileInStream = new RandomAccessFile(file, "r"); fileInStream.seek(Integer.valueOf(position)); //��ָ���Ķϵ�λ����������������� byte[] buffer = new byte[1024]; int len = -1; while( (len = fileInStream.read(buffer)) != -1){ //��д���ڴ��� outStream.write(buffer, 0, len); //�ٴ��ڴ�����Byte����ʽ��������� } fileOutStream.close(); //�ر���������socket��ʹ��tcp/ipЭ�飬�ϵͲ㣬û��ʹ�û��漼���ʲ���Ҫʹ��flush() outStream.close(); inStream.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } } /** * ��ȡ�� * @param inStream * @return �ֽ����� * @throws Exception */ public static byte[] readStream(InputStream inStream) throws Exception{ ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = -1; while( (len=inStream.read(buffer)) != -1){ outSteam.write(buffer, 0, len); } outSteam.close(); inStream.close(); return outSteam.toByteArray(); } }